import { cmdCross } from '@app-cad/environments/nextcad/commands/curved/cmd-cross';
import { cmdCross2 } from '@app-cad/environments/nextcad/commands/curved/cmd-cross2';
import { cmdCurveBreak } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-break';
import { cmdCurveJoin } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-join';
import { cmdExtrudeSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-extrude-surface';
import { cmdFaceJoin } from '@app-cad/environments/nextcad/commands/curved/cmd-face-join';
import { cmdFillSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-fill-surface';
import { cmdFillet } from '@app-cad/environments/nextcad/commands/curved/cmd-fillet';
import { cmdLoftSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-loft-surface';
import { cmdCurveMirror } from '@app-cad/environments/nextcad/commands/curved/cmd-mirror';
import { cmdMove } from '@app-cad/environments/nextcad/commands/curved/cmd-move';
import { cmdVertexExtremal } from '@app-cad/environments/nextcad/commands/curved/cmd-point-extremal';

import { cmdBoolean } from '@app-base/environments/nextcad/commands/curved/cmd-boolean';
import { cmdCurveParallel } from '@app-base/environments/nextcad/commands/curved/cmd-curve-parallel';
import { cmdRevolveSweep } from '@app-base/environments/nextcad/commands/curved/cmd-revolve-sweep';
import { cmdRotateSurface } from '@app-base/environments/nextcad/commands/curved/cmd-rotate-surface';
import { cmdSurfaceSpliter } from '@app-base/environments/nextcad/commands/curved/cmd-surface-splitter';
import { cmdCylinderSurface } from '@app-base/environments/nextcad/commands/feature/cmd-cylinder-surface';
import { cmdSphereSurface } from '@app-base/environments/nextcad/commands/feature/cmd-sphere-surface';
import { cmdCopyPlane } from '@app-cad-env/nextcad/commands/curved/cmd-copy-plane';
import { cmdExplodeSurface } from '@app-cad-env/nextcad/commands/curved/cmd-explode-surface';
import { cmdRuledCurface } from '@app-cad-env/nextcad/commands/curved/cmd-ruled-surface';
import { cmdCurveAffine } from '@app-cad/environments/nextcad/commands/curved/cmd-affine';
import { cmdArcOfCircle } from '@app-cad/environments/nextcad/commands/curved/cmd-arc';
import { cmdBlendCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-blend-curve';
import { cmdBlendSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-blend-surface';
import { cmdBoundary } from '@app-cad/environments/nextcad/commands/curved/cmd-boundary';
import { cmdCircularSweep } from '@app-cad/environments/nextcad/commands/curved/cmd-circle-sweep';
import { cmdCopyVertex } from '@app-cad/environments/nextcad/commands/curved/cmd-copy-vertex';
import { cmdCurveConic } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-conic';
import { cmdConicalSweep } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-conic-sweep';
import { cmdCurveHybrid } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-hybrid';
import { cmdCurveIso } from '@app-cad/environments/nextcad/commands/curved/cmd-curve-iso';
import { cmdDisplaySweepSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-display-sweep-surface';
import { cmdDoubleTrackSweep } from '@app-cad/environments/nextcad/commands/curved/cmd-double-track-sweep';
import { cmdExplode } from '@app-cad/environments/nextcad/commands/curved/cmd-explode';
import { cmdExtendCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-extend-curve';
import { cmdExtendSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-extend-surface';
import { cmdFaceSew } from '@app-cad/environments/nextcad/commands/curved/cmd-face-sew';
import { cmdFourPointSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-four-point-surface';
import { cmdInverseSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-inverse-surface';
import { cmdLawCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-law-curve';
import { cmdLine } from '@app-cad/environments/nextcad/commands/curved/cmd-line';
import { cmdLinearSweep } from '@app-cad/environments/nextcad/commands/curved/cmd-linear-sweep';
import { cmdMatchCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-match-curve';
import { cmdMatchSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-match-surface';
import { cmdMface } from '@app-cad/environments/nextcad/commands/curved/cmd-mface';
import { cmdMonorailSweep } from '@app-cad/environments/nextcad/commands/curved/cmd-monorail-sweep';
import { cmdMsolid } from '@app-cad/environments/nextcad/commands/curved/cmd-msolid';
import { cmdOffsetCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-offest-curve';
import { cmdPick } from '@app-cad/environments/nextcad/commands/curved/cmd-pick';
import { cmdPoint } from '@app-cad/environments/nextcad/commands/curved/cmd-point';
import { cmdPolyline } from '@app-cad/environments/nextcad/commands/curved/cmd-polyline';
import { cmdProjection } from '@app-cad/environments/nextcad/commands/curved/cmd-projection';
import { cmdRebuildCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-rebuild-curve';
import { cmdReSamplingCurve } from '@app-cad/environments/nextcad/commands/curved/cmd-resampling-curve';
import { cmdSurfaceRotate } from '@app-cad/environments/nextcad/commands/curved/cmd-rotate';
import { cmdCurveScale } from '@app-cad/environments/nextcad/commands/curved/cmd-scale';
import { cmdSetPosition } from '@app-cad/environments/nextcad/commands/curved/cmd-set-position';
import { cmdSmooth } from '@app-cad/environments/nextcad/commands/curved/cmd-smooth';
import { cmdSpline } from '@app-cad/environments/nextcad/commands/curved/cmd-spline';
import { cmdRebuildSurface } from '@app-cad/environments/nextcad/commands/curved/cmd-surface-rebuild';
import { cmdSurfaceTranslation } from '@app-cad/environments/nextcad/commands/curved/cmd-surface-translation';
import { cmdSurfaceTrim } from '@app-cad/environments/nextcad/commands/curved/cmd-surface-trim';
import {
  cmdThread,
  cmdThreadInner,
} from '@app-cad/environments/nextcad/commands/feature/cmd-thread';
import { cmdPlane } from '../../environments/nextcad/commands/curved/cmd-plane';
import { cmdCsys } from '../commands/cmd-csys';
import { CommandConfigItem } from './types';
import { cmdHelix } from '@app-base/environments/nextcad/commands/feature/cmd-helix';

export const curvedCommandList: CommandConfigItem[] = [
  {
    objType: 'Part::Curve',
    type: 'Polygon',
    command: cmdPolyline,
  },
  {
    objType: 'Part::Boolean',
    command: cmdBoolean,
  },
  {
    objType: 'Part::Curve',
    type: 'ArcOfCircle',
    command: cmdArcOfCircle,
  },
  {
    objType: 'Part::Curve',
    type: 'Intersection',
    command: cmdCross,
  },
  {
    objType: 'Part::Intersect',
    command: cmdCross2,
  },
  {
    objType: 'Part::Curve',
    type: 'Project',
    command: cmdProjection,
  },
  {
    objType: 'Part::Vertex',
    mode: 'project',
    command: cmdProjection,
  },
  {
    objType: 'Part::Vertex',
    mode: 'extremal',
    command: cmdVertexExtremal,
  },
  {
    objType: 'Part::Vertex',
    mode: 'curve-int',
    command: cmdCross,
  },
  {
    objType: 'Part::Vertex',
    mode: 'plane-int',
    command: cmdCross,
  },
  {
    objType: 'Part::Vertex',
    mode: 'bypoint',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'coordinate',
    command: cmdPoint,
  },
  {
    objType: 'LawCurve',
    type: 'Spline',
    command: cmdLawCurve,
  },
  {
    objType: 'LawCurve',
    type: 'Formula',
    command: cmdLawCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Hybrid',
    command: cmdCurveHybrid,
  },
  {
    objType: 'Part::Curve',
    type: 'Bspline',
    mode: 'Interpolate',
    command: cmdSpline,
  },
  {
    objType: 'Part::Curve',
    type: 'Helix',
    command: cmdHelix,
  },
  {
    objType: 'Part::Surface',
    type: 'Extrude',
    command: cmdExtrudeSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'Explode',
    command: cmdExplodeSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'Ruled',
    command: cmdRuledCurface,
  },
  {
    objType: 'Part::Curve',
    type: 'Line',
    command: cmdLine,
  },
  {
    objType: 'Part::Surface',
    type: 'LinearSweep',
    command: cmdLinearSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'CircularSweep',
    command: cmdCircularSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'Offset',
    command: cmdSurfaceTranslation,
  },
  {
    objType: 'Part::Surface',
    type: 'Loft',
    command: cmdLoftSurface,
  },
  {
    objType: 'Part::Frame',
    command: cmdCsys,
  },
  {
    objType: 'Part::Curve',
    type: 'Break',
    command: cmdCurveBreak,
  },
  {
    objType: 'Part::Curve',
    type: 'Join',
    command: cmdCurveJoin,
  },
  {
    objType: 'Part::Curve',
    type: 'Iso',
    command: cmdCurveIso,
  },
  {
    objType: 'Part::Surface',
    type: 'Join',
    command: cmdFaceJoin,
  },
  {
    objType: 'Part::Surface',
    type: 'Sew',
    command: cmdFaceSew,
  },
  {
    objType: 'Part::Surface',
    type: 'Trim',
    command: cmdSurfaceTrim,
  },
  {
    objType: 'Part::Surface',
    type: 'Fill',
    command: cmdFillSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'ExplicitSweep',
    command: cmdDisplaySweepSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'MonorailSweep',
    command: cmdMonorailSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'DoubleTrackSweep',
    command: cmdDoubleTrackSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'Match',
    command: cmdMatchSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'Blend',
    command: cmdBlendSurface,
  },
  {
    objType: 'Part::Curve',
    type: 'Fillet',
    command: cmdFillet,
  },
  {
    objType: 'Part::Curve',
    type: 'Conic2',
    command: cmdCurveConic,
  },
  {
    objType: 'Part::Curve',
    type: 'Boundary',
    command: cmdBoundary,
  },
  {
    objType: 'Part::Curve',
    type: 'Smooth',
    command: cmdSmooth,
  },
  {
    objType: 'Part::Curve',
    type: 'Rebuild',
    command: cmdRebuildCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Blend',
    command: cmdBlendCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Match',
    command: cmdMatchCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Resample',
    command: cmdReSamplingCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Offset',
    command: cmdOffsetCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Extend',
    command: cmdExtendCurve,
  },
  {
    objType: 'Part::Curve',
    type: 'Parallel',
    command: cmdCurveParallel,
  },
  {
    objType: 'Part::Surface',
    type: 'Extend',
    command: cmdExtendSurface,
  },
  {
    objType: 'Part::Translation',
    command: cmdMove,
  },
  {
    objType: 'Part::Plane',
    command: cmdPlane,
  },
  {
    objType: 'Part::PlaneCopy',
    command: cmdCopyPlane,
  },
  {
    objType: 'Part::Rotate',
    command: cmdSurfaceRotate,
  },
  {
    objType: 'Part::Mirror',
    command: cmdCurveMirror,
  },
  {
    objType: 'Part::Scale',
    command: cmdCurveScale,
  },
  {
    objType: 'Part::Affine',
    command: cmdCurveAffine,
  },
  {
    objType: 'Part::Msolid',
    command: cmdMsolid,
  },
  {
    objType: 'Part::Mface',
    command: cmdMface,
  },
  {
    objType: 'Part::Surface',
    mode: 'Picker',
    command: cmdPick,
  },
  {
    objType: 'Part::Curve',
    mode: 'Picker',
    command: cmdPick,
  },
  {
    objType: 'Part::Vertex',
    mode: 'Picker',
    command: cmdPick,
  },
  {
    objType: 'Part::VertexCopy',
    command: cmdCopyVertex,
  },
  {
    objType: 'Part::Surface',
    type: 'Rebuild',
    command: cmdRebuildSurface,
  },
  {
    objType: 'Part::Curve',
    type: 'Explode',
    command: cmdExplode,
  },
  {
    objType: 'Part::Vertex',
    mode: 'coordinate',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: '2point',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'oncurve',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'onplane',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'onsurface',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'center',
    command: cmdPoint,
  },
  {
    objType: 'Part::Vertex',
    mode: 'curve-tangency',
    command: cmdPoint,
  },
  {
    objType: 'Part::Curve',
    type: 'Circle',
    command: cmdArcOfCircle,
  },
  {
    objType: 'Part::PositionTransform',
    command: cmdSetPosition,
  },
  {
    objType: 'Part::Surface',
    type: 'RotationSweep',
    command: cmdRevolveSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'Cylinder',
    command: cmdCylinderSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'Spherical',
    command: cmdSphereSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'Revol',
    command: cmdRotateSurface,
  },
  {
    objType: 'Part::Surface',
    type: 'ConicalSweep',
    command: cmdConicalSweep,
  },
  {
    objType: 'Part::Surface',
    type: 'Split',
    command: cmdSurfaceSpliter,
  },
  {
    objType: 'Part::Surface',
    type: 'TrimEachOther',
    command: cmdSurfaceTrim,
  },
  {
    objType: 'Part::Surface',
    type: 'Reverse',
    command: cmdInverseSurface,
  },
  {
    objType: 'Part::Surface',
    command: cmdFourPointSurface,
  },
  {
    objType: 'Part::Thread',
    ishole: false,
    command: cmdThread,
  },
  {
    objType: 'Part::Thread',
    ishole: true,
    command: cmdThreadInner,
  },
  {
    objType: 'Part::Picker',
    command: cmdPick,
  },
];
